﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once

#include "GcmpDatabase.h"
#include "NdbObject.h"
#include "ClassId.h"

namespace gcmp
{
    /// Schematic对象基类
    class GCMP_DATABASE_EXPORT NdbObjectSchematic : public NdbObject
    {
        DEFINE_CAST_DERIVED(gcmp::NdbObjectSchematic, gcmp::NdbObject);
    public:
        NdbObjectSchematic();
        virtual ~NdbObjectSchematic(void);

        /**
        *@brief    NDB框架会在Clone结束之后调用此函数
        *@note     ElementId已经处理过，无需通过此接口处理。仅仅依靠框架拷贝对象不能满足需求的，实现此接口。
         目前使用到的一个例子是GBody，在被NDB框架Clone之后需要更新face ref list和edge ref list
        *@param[in] pOld    克隆之前的对象
        */
        virtual bool OnCloned(const NdbObject * pOld) { return true; }

        /**
        *@brief    NDB框架会在Unserialize结束之后调用此函数
        *@note     IDocument*已经处理过，无需通过此接口处理。仅仅依靠框架反序列化对象不能满足需求的，实现此接口。
        目前使用到的一个例子是GBody，在被NDB框架反序列化之后需要构建face ref list和edge ref list
        *@param[in] pOld    克隆之前的对象
        */
        virtual void OnUnserialized() {}

        /**
        *@brief     获取类Id
        */
        static const ClassId & GetClassId() { static ClassId s_ClassId; return s_ClassId; }
    };
}


